// 实例、原型、静态属性或方法
// 一个函数是不是构造函数：取决于你怎么用
/* function App(name) {
  // 实例属性
  this.name = name
  // 实例方法
  this.showName = function () {
    console.log('Hello')
  }
}

const a = new App('ifer')
const b = new App('elser')
// console.log(a.name) // 'ifer'
console.log(a.showName === b.showName) // false */

/* function App(name) {
  // 实例属性
  this.name = name
}
// 原型属性
App.prototype.age = 18
// 原型方法
App.prototype.showName = function () {
  console.log('Hello')
}

const a = new App('ifer')
const b = new App('elser')
console.log(a.showName === b.showName) // true */

//  class App {
//   constructor(name) {
//     // 挂载 constructor 里面的是实例属性和方法
//     this.name = name
//     this.showName = function () {
//       console.log('Hello')
//     }
//   }
// }
// const a = new App('ifer')
// const b = new App('elser')
// console.log(a.name === b.name,123);// false
// console.log(a.showName === b.showName) // false 

/* class App {
  constructor(name) {
    // !挂载 constructor 里面的是实例属性和方法
    this.name = name
  }
  // 原型方法
  showName() {
    console.log('Hello')
  }
}
const a = new App('ifer')
const b = new App('elser')
console.log(a.showName === b.showName) // true */

/* class App {
  constructor(name) {
    // !挂载 constructor 里面的是实例属性和方法
    this.name = name
  }
  // 实例属性
  state = {
    age: 18,
  }
  // 原型方法
  showName() {
    console.log('Hello')
  }
}
const a = new App('ifer')
const b = new App('elser')
console.log(a.state === b.state) // false，实例属性 */

/* class App {
  // !直接在 class 内部通过等号赋值的是挂载到实例上的
  // 实例方法
  showName = () => {
    console.log('Hello1')
  }
  // 原型方法
  showName() {
    console.log('Hello2')
  }
}
const a = new App('ifer')
const b = new App('elser')
// console.log(a.showName === b.showName) // false，实例属性
a.showName() // */

/* function App(name) {
  // 实例属性
  this.name = name
}
// 原型方法
App.prototype.showName = function () {}

// 静态属性方法：直接通过构造函数能访问的属性或方法称为静态属性或方法
App.version = 'xxx'

const a = new App()
console.log(a.version)
console.log(App.version) */

class App {
  // 静态属性
  static age = 18
}
App.age2 = 19
console.log(App.age)
console.log(App.age2)

// 多个对象之间通过 __proto__ 链接起来的这种关系就是原型链
// a => App => Object.prototype